From 4f1d9452becc18301b561d4a6fc575cfb4137911 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 21 Feb 2014 22:31:16 -0500 Subject: [PATCH] Fix life-cycle handling of treeview columns gtk_tree_view_remove_column was first removing the column from its list, then call gtk_tree_view_column_unset_tree_view, which would then call gtk_container_remove to remove its button from the treeview. But the treeview remove implementation relied on the column being still in the list in order to recognize the button as 'special', so in effect the button was never properly removed and thus, leaked. Fix this by callling unset_tree_view before removing the column from the list. https://bugzilla.gnome.org/show_bug.cgi?id=724891 --- gtk/gtktreeview.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index 953f0709d4..2e0aa5da0b 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -11923,6 +11923,11 @@ gtk_tree_view_remove_column (GtkTreeView *tree_view, position = g_list_index (tree_view->priv->columns, column); + if (gtk_widget_get_realized (GTK_WIDGET (tree_view))) + _gtk_tree_view_column_unrealize_button (column); + + _gtk_tree_view_column_unset_tree_view (column); + tree_view->priv->columns = g_list_remove (tree_view->priv->columns, column); tree_view->priv->n_columns--; @@ -11930,7 +11935,6 @@ gtk_tree_view_remove_column (GtkTreeView *tree_view, { GList *list; - _gtk_tree_view_column_unrealize_button (column); for (list = tree_view->priv->columns; list; list = list->next) { GtkTreeViewColumn *tmp_column; @@ -11948,7 +11952,6 @@ gtk_tree_view_remove_column (GtkTreeView *tree_view, } _gtk_tree_view_reset_header_styles (tree_view); - _gtk_tree_view_column_unset_tree_view (column); _gtk_tree_view_accessible_remove_column (tree_view, column, position); g_object_unref (column); -- 2.30.2